package com.Fh.Throws;


import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class ThrowsDetail {
    public static void main(String[] args) {
        f1();
    }
    public static void f1() /*throws ArithmeticException*/ {
//        1）	对于编译异常，程序中必须处理，比如try-catch或者throws
//        2）	对于运行时异常，程序中如果没有处理，默认就是throws的方式处理
        int a = 10;
        int b = 0;
        int res = a / b;//对于没有进行try-catch默认使用throws异常处理
    }
    public static void f2() throws FileNotFoundException {
        //解读：由于f3是编译异常，在调用f3方法时需要显示的的处理
        //处理方法有两种：
        //1. 可以直接抛出同f3一样的异常
        //2. 通过try-catch手段处理
        try {
            f3();
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
    public static void f3() throws FileNotFoundException  {
        FileInputStream fis = new FileInputStream("d://aa.txt");
    }
    public static void f4(){
        //解读：f5抛出的是运行异常，运行异常是有默认处理的
        //在java中，并不要求程序员显示的处理
        f5();
    }
    public static void f5() throws ArithmeticException {
    }
}
//        3)    子类重写父类的方法时，对抛出异常大的规定：
//              子类重写的方法，所抛出的异常类型要么和父类抛出的异常一致，要么为父类抛出的异常类型的子类型
//        4)            在throws过程中，如果由try-catch，就相当于处理异常，就可以不必throws
class Father {
    public void method() throws RuntimeException {

    }
}
class Son extends Father {
//    @Override
//    public void method() throws Exception {//这里不被允许的
//
//    }

    @Override
    public void method() throws ArithmeticException {

    }
}